// 用户状态模块，  这一层，由页面来负责调用
import { defineStore } from "pinia";   //导入pinia中的defineStore方法，来创建store
import { UserState, LoginFormData } from "@/types"; // 数据类型的定义是放在typescript模板中，使用typescript语言定义好数据类型
import { login } from '@/api/login';  //登录的api，获取用户信息的api引入进来
import { getUserInfo } from '@/api/system/user';
import { localStorage } from '@/utils/storage';
import { resetRouter } from '@/router';  //导入重置路由的方法

//store的数据形状来源自typescript定义
const useUserStore = defineStore({
    id: 'user',  //声明一个state，依旧和vuex差不多
    state: (): UserState => ({
      personnelId: '',
      userName:'',
      departmentId: '',
      departmentName: '',
      rolesId: '',
      roles: [],
      appuserId:'',
      account: localStorage.get('account') || '',
    }),
    //声明方法
    actions: {
      //暂时不知道它干嘛的，猜测是重置自己
      async RESET_STATE() {
        this.$reset();
      },


    /**
     * 用户登录请求  这里调用api发送请求，同时这里也负责处理请求，但是这里处理了个啥呀？
     * @param userInfo 登录用户信息
     *  account: 账号
     *  password: 密码
     */
     login(userInfo: LoginFormData) {
      const { account, password } = userInfo;  //先取出从页面来的值
      return new Promise((resolve, reject) => {
        //调用api发送请求给后端，注意login这个方法需要的参数是什么
        login({
          account: account.trim(),
          password: password,
        })
          .then(response => {
            const { account } = response.data;
            console.log("回来了呀")
            console.log(account)
            localStorage.set('account', account);
            this.account = account;
            resolve(response.data);
          })
          .catch(error => {
            reject(error);
          });
      });
    },
        /**
     *  获取用户信息（应该多一点，名称、部门id，角色id，角色名称列表）
     */
         getUserInfo() {
          return new Promise((resolve, reject) => {
            getUserInfo(this.account)
              .then(({ data }) => {
                console.log(data)
                console.log('222222222');
                if (!data) {
                  return reject('登录验证失败，请重试');
                }
                // const { userName, departmentId, rolesId, roles } = data;
                if (!data.roles || data.roles.length <= 0) {
                  console.log("下面")
                  reject('用户角色信息错误，请重试');
                }
                console.log('222222222');
                this.personnelId = data.personnelId;  //
                this.userName = data.userName;
                this.departmentId= data.departmentId;
                this.departmentName= data.departmentName;
                this.rolesId= data.rolesId;
                this.roles= data.roles;
                this.appuserId= data.appuserId;
                console.log('222222222');
                resolve(data);
              })
              .catch((error) => {
                console.log("走了错误")
                reject(error);
              });
          });
        },
    /**
     *  注销 ，消除我在系统中的痕迹
     */
    logout() {
      console.log("退出")
      localStorage.remove('account');  //从浏览器缓存中清除痕迹
      this.RESET_STATE();  //重置自己
      resetRouter();  //重置路由
    },

    /**
     * 清除 我在系统中的痕迹，那我就不想叫原来的名字
     */
    resetAccount() {
      return new Promise((resolve) => {
        localStorage.remove('account');
        this.RESET_STATE();
        resolve(null);
      });
    },
    }
})


export default useUserStore  //将定义好的导出